package main

import (
	_ "encoding/json"
	"net/http"

	"github.com/gin-gonic/gin"
)

// 方式一：使用默认的路由器，不带参数解析
// func main() {
// 	r := gin.Default()
// 	r.GET("/ping", func(c *gin.Context) {
// 		c.JSON(http.StatusOK, gin.H{
// 			"message": "pong",
// 		})
// 	})
// 	r.Run(":8080")
// }

// 方式二，使用默认的路由器，带参数解析
// func main() {
// 	r := gin.Default()
// 	r.GET("/user/:name", func(c *gin.Context) {
// 		name := c.Param("name")
// 		c.JSON(http.StatusOK, gin.H{
// 			"message": "Hello " + name,
// 		})
// 	})
// 	r.Run(":8080")
// }

// 方式三：使用自定义的路由器，带参数解析
// func main() {
// 	r := gin.New()
// 	r.GET("/user/:name", func(c *gin.Context) {
// 		name := c.Param("name")
// 		c.JSON(http.StatusOK, gin.H{
// 			"message": "Hello " + name,
// 		})
// 	})
// 	r.Run(":8080")
// }

// 方式四：使用默认路由器，获取querystring参数
// func main()  {
// 	r := gin.Default()
// 	r.GET("/query", func(c *gin.Context) {
// 		name := c.Query("name")
// 		age := c.DefaultQuery("age", "22")
// 		c.JSON(http.StatusOK, gin.H{
// 			"message": "Hello " + name + "! 你今年" + age + "岁了",
// 		})
// 	})
// 	r.Run(":8080")
// }

// 方式五：使用默认路由，获取form参数
// func main()  {
// 	r := gin.Default()
// 	r.POST("/form", func(c *gin.Context) {
// 		name := c.PostForm("name")
// 		age := c.DefaultPostForm("age", "22")
// 		c.JSON(http.StatusOK, gin.H{
// 			"message": "Hello " + name + "! 你今年" + age + "岁了",
// 		})
// 	})
// 	r.Run(":8080")
// }

// 方式六：使用默认路由器，参数绑定
func main()  {
	r := gin.Default()
	r.POST("/json", func(c *gin.Context) {
		var json struct {
			Name string `json:"name"`
			Age  string `json:"age"`
		}
		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err.Error(),
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{
			"message": "Hello " + json.Name + "! 你今年" + json.Age + "岁了",
		})
	})
	r.Run(":8080")
}

// 方式七：使用默认路由器，获取JSON参数
// func main()  {
// 	r := gin.Default()
// 	r.POST("/json", func(c *gin.Context) {
// 		b, _ := c.GetRawData()
		
// 		var m map[string]interface{}

// 		if err := json.Unmarshal(b, &m); err != nil {
// 			c.JSON(http.StatusBadRequest, gin.H{
// 				"error": err.Error(),
// 			})
// 			return
// 		}

// 		name := m["name"].(string)
// 		age := m["age"].(string)

// 		c.JSON(http.StatusOK, gin.H{
// 			"message": "Hello " + name + "! 你今年" + age + "岁了",
// 		})
// 	})
// 	r.Run(":8080")
// }